import Foundation from '@/utils/Foundation.js';
import {
	md5
} from '@/utils/md5.js';
import storage from "@/utils/storage.js";
import store from "@/store/index.js";

// 重新整理一下config
const configHandle = (config) => {
	// 'development', 'production'
	if (process.env.NODE_ENV === 'development') {
		const nonce = Foundation.randomString(6)
		const timestamp = parseInt(new Date().getTime() / 1000)
		const sign = md5( nonce + timestamp + storage.getAccessToken())
		if (config.url.indexOf('?') === -1) {
			config.url = `${config.url}?&nonce=${nonce}&timestamp=${timestamp}&sign=${sign}`
		} else {
			let params = urlParse(config.url);
			console.info(params);
			let url = config.url.split('?')[0];
			params = { ...params,
				nonce,
				timestamp,
				sign
			};
			let str = '';
			for (var k in params) {
				console.info(k, params[k])
				str += '&' + k + '=' + params[k];
			}
			str = str.substr(1);
			config.url = `${url}?${str}`;
		}
		config.header = {
			...config.header,
			uuid: storage.getUuid()
		}
	} else {
		config.header = {
			...config.header,
			Authorization: storage.getAccessToken(),
			uuid: storage.getUuid()
		}
	}
	return config
}

/**
 * 解析url参数
 * @example ?id=12345&a=b
 * @return Object {id:12345,a:b}
 */
function urlParse(url) {
	let obj = {};
	let reg = /[?&][^?&]+=[^?&]+/g;
	let arr = url.match(reg);
	if (arr) {
		arr.forEach((item) => {
			let tempArr = item.substring(1).split('=');
			let key = decodeURIComponent(tempArr[0]);
			let val = decodeURIComponent(tempArr.splice(1).join('='));
			obj[key] = val;
		});
	}
	return obj;
};

const getNetworkType = () => {
	uni.getNetworkType({
		success: (res) => {
			if (res.networkType === 'none') {
				uni.showToast({
					title: '网络好像有点问题,请检查后重试！',
					duration: 2000,
					icon: 'none'
				});
				let pages = getCurrentPages();
				if (pages.length) {
					let route = pages[pages.length - 1].route;
					if (route !== 'pages/empty/empty') {
						uni.navigateTo({
							url: `/pages/empty/empty?type=wifi`
						})
					}
				}else{
					uni.navigateTo({
						url: `/pages/empty/empty?type=wifi`
					})
				}
			}
		}
	})
}

const throttle = (fn, that, gapTime) => {
	// export function throttle(fn, gapTime) {
	if (gapTime == null || gapTime == undefined) {
		gapTime = 1800
	}
	let _lastTime = that.lastTime
	let _nowTime = +new Date()
	if (_nowTime - _lastTime > gapTime || !_lastTime) {
		fn.apply(that, arguments) //将this和参数传给原函数
		that.lastTime = _nowTime
	}
}

/**
 * 计算传秒数的倒计时【天、时、分、秒】
 * @param seconds
 * @returns {{day : *, hours : *, minutes : *, seconds : *}}
 */
const countTimeDown = (seconds) => {
	const leftTime = (time) => {
		if (time < 10) time = '0' + time
		return time + ''
	}
	return {
		day: leftTime(parseInt(seconds / 60 / 60 / 24, 10)),
		hours: leftTime(parseInt(seconds / 60 / 60 % 24, 10)),
		minutes: leftTime(parseInt(seconds / 60 % 60, 10)),
		seconds: leftTime(parseInt(seconds % 60, 10))
	}
}

/**
 * 计算当前时间到第二天0点的倒计时[秒]
 * @returns {number}
 */
const theNextDayTime = () => {
	const nowDate = new Date()
	const time = new Date(nowDate.getFullYear(), nowDate.getMonth(), nowDate.getDate() + 1, 0, 0, 0).getTime() -
		nowDate.getTime()
	return parseInt(time / 1000)
}

export {
	//configHandle,
	getNetworkType,
	throttle,
	countTimeDown,
	theNextDayTime
}
